/*
 * @Author: 137 '1432417996@qq.com'
 * @Date: 2025-03-24 21:10:36
 * @LastEditors: 137 '1432417996@qq.com'
 * @LastEditTime: 2025-04-28 21:42:21
 * @FilePath: \starter-3\api\request.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import axios from 'axios'
import { useUserStore } from './../stores/user'
// import router from '../router'

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'

// 创建一个函数来获取API基础URL
const getApiBaseUrl = () => {
  try {
    // 使用Nuxt提供的方法判断环境
    if (import.meta.client) {
      // 客户端环境
      return window.__NUXT__?.config?.public?.apiBase ||  'https://zlz137.com/api/'
    } else {
      // 服务器端环境
      return process.env.NUXT_PUBLIC_API_BASE || 'https://zlz137.com/api/'
    }
  } catch (error) {
    console.error('获取API基础URL失败:', error)
    return  'https://zlz137.com/api/' // 默认值
  }
}

export const request = axios.create({
  baseURL: getApiBaseUrl(),
})

// 请求拦截器
request.interceptors.request.use(
    config => {
        // 在发送请求之前做些什么，比如添加 token
        const token = useUserStore.token || localStorage.getItem('token');
        // const token = useUserStore().token ;
        if (token) {
            // 动态添加 Authorization 头
            config.headers['Authorization'] = 'Bearer ' + token;
        }
        return config;
    },
    error => {
        // 对请求错误做些什么
        return Promise.reject(error);
    }
);

request.interceptors.response.use(
  response => {
    // 处理blob类型的响应
    if (response.config.responseType === 'blob') {
      if (response.status === 200) {
        return response.data
      } else {
        //ElMessage.error('下载失败')
        return Promise.reject(new Error('下载失败'))
      }
    }

    // 处理普通响应
    const res = response.data
    
    // 如果响应成功
    if (response.status === 200) {
      return res
    } else {
      // ElMessage.error(res.msg || '请求失败')
      console.log('response.data------------',res)
      return Promise.reject(new Error({message: res.msg || '请求失败'}))
    }
  },
  error => {
    // 处理错误响应
    let message = '请求失败'
    
    if (error.response) {
      // 服务器返回了错误状态码
      switch (error.response.status) {
        case 400:
          message = '请求错误'
          break
        case 401:
          message = '未授权，请重新登录'
          // 处理登录过期
          const userStore = useUserStore()
          userStore.clearUser()
          userStore.setShowLoginDialog(true)
          break
        case 403:
          message = '拒绝访问'
          break
        case 404:
          message = '请求地址出错'
          break
        case 408:
          message = '请求超时'
          break
        case 500:
          message = '服务器内部错误'
          break
        case 501:
          message = '服务未实现'
          break
        case 502:
          message = '网关错误'
          break
        case 503:
          message = '服务不可用'
          break
        case 504:
          message = '网关超时'
          break
        case 505:
          message = 'HTTP版本不受支持'
          break
        default:
          message = `连接出错(${error.response.status})`
      }
    } else if (error.request) {
      // 请求已发出，但没有收到响应
      message = '网络错误，请检查您的网络连接'
    } else {
      // 请求配置出错
      message = error.message
    }

    // ElMessage.error(message)
    return Promise.reject(error)
  }
)
